package com.qf.service.impl;

import com.qf.dao.AddressDao;
import com.qf.dao.OrderDao;
import com.qf.dao.impl.AddressDaoImpl;
import com.qf.dao.impl.OrderDaoImpl;
import com.qf.pojo.Address;
import com.qf.service.AddressService;
import com.qf.utils.TxUtils;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

/**
 * @author 千锋教育
 * @Company http://www.mobiletrain.org/
 * @Version 1.0
 */
public class AddressServiceImpl implements AddressService {

    AddressDao addressDao = new AddressDaoImpl();

    @Override
    public List<Address> findAddListByUid(int uid) {
        return addressDao.findAddListByUid(uid);
    }

    @Override
    public void insert(Address address) {
        addressDao.insert(address);
    }

    OrderDao orderDao = new OrderDaoImpl();

    @Override
    public void deleteById(String id) {
        //查询该地址是否在订单表出现过，如果出现，则不能删除， 如果没有出现，则删除
        long count = orderDao.findCountByAid(id);
        if(count == 0) {
            addressDao.deleteById(id);
        } else {
            System.out.println("与订单关联，不能删除");
        }
    }

    @Override
    public void update(Address address) {
        addressDao.update(address);
    }

    /**
     * 事务流程
     * try {
     *     开启事务： conn.setAutoCommit(false)  ==》 设置事务不能自动提交
     *      执行具体的业务
     *     提交事务：conn.commit();
     * } catch(Exception e) {
     *     回滚事务：conn.rollback();
     * } finally {
     *     结束事务：conn.setAutoCommit(true);
     * }
     *
     *
     * 事务自动提交：执行sql自动提交
     *
     * 设置用户的 默认收货地址
     * 1. 设置该用户的level = 0 （首先设置该用户都不是默认地址）
     * 2. 设置某地址为默认地址(level = 1)
     * @param aid
     * @param uid
     */
    @Override
    public void setDefaultAddress(String aid, int uid) {
        Connection conn = TxUtils.getConn();
        try {
            //开启事务：
            conn.setAutoCommit(false); // 设置事务不能自动提交
            //设置所有都不是默认地址
            addressDao.clearDefaultAddress(uid);
            //设置某地址为 某用户的默认地址
            addressDao.setDefalutAddress(aid);
            //提交事务：
            conn.commit();
        } catch(Exception e) {
            // 回滚事务：
            try {
                conn.rollback();
            } catch (SQLException e1) {
                e1.printStackTrace();
            }
        } finally {
            //移除线程中的 连接对象
            TxUtils.remove();
            //结束事务：
            try {
                conn.setAutoCommit(true);
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }


    }
}
